﻿package {
	//可视化相关类
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.display.BlendMode;
	//事件类
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.MouseEvent;
	//加载相关类
	import flash.net.URLRequest;
	import flash.net.URLLoader;
	import flash.display.Loader;
	//文本框相关类
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	//系统设置类
	import flash.system.System;
	
	//类及变量声明
	//======================================================================================//
	public class MusicList extends MovieClip {
		//列表MC数组引用
		private var mcArr:Array=new Array();
		//列表文本框数组引用
		private var txtArr:Array=new Array();
		//列表容器
		private var listMC:Sprite=new Sprite();
		//列表XML文件 
		private var loadURL:URLRequest;
		//列表加载对象
		private var listURLLoader:URLLoader;
		//列表数组
		private var listArr:Array=new Array();
		//被点击的歌曲
		private var _musicURL:String;
		//歌曲点击事件
		public const MUSIC_CLICK:String="MusicClick"
		
		//======================================================================================//
		//构造函数
		public function MusicList():void {
			init();
		}
		//初始化
		private function init() {
			blendMode=BlendMode.ADD;
		}
		//
		//======================================================================================//
		/**
		//提供给外部设置的属性
		**/
		//================================================》
		//设置要生成的列表数组
		public function set list(arr:Array) {
			listArr=arr;
			drawList();
		}
		//
		//======================================================================================//
		/**
		//提供给外部的只读属性
		**/
		//================================================》
		//当前选中的歌曲URL
		public function get musicURL():String {
			return _musicURL;
		}
		//
		//======================================================================================//
		/**
		//提供给外部的方法
		**/
		//================================================》
		//更新列表显示（即使当前播放的歌曲高亮显示）
		public function upList(id:int) {
			for (var i:int=0; i < listArr.length; i++) {
				if (id == i) {
					txtArr[i].alpha=.6
				} else {
					txtArr[i].alpha=.3
				}
				
			}
		}
		// 
		//======================================================================================//
		/**
		以下为类内部函数
		**/
		//================================================》
		//生成列表方法
		private function drawList() {
			//加载列表显示风格UI
			var url:URLRequest=new URLRequest("playListUI.swf");
			var loads:Loader=new Loader;
			loads.load(url);
			loads.contentLoaderInfo.addEventListener(Event.COMPLETE,loadOK);
		}
	    //================================================》
		//加载UI文件成功后生成列表
		private function loadOK(e:Event) {
			//得到按扭实例的类的引用
			var mc:Class=e.target.content.songBTN_MC.constructor  as  Class;
			for (var i:int=0; i < listArr.length; i++) {
				mcArr[i]=new mc();
				mcArr[i].urls=listArr[i].url;
				mcArr[i].addEventListener(MouseEvent.MOUSE_DOWN,downs);
				mcArr[i].y=i * 20;
				txtArr[i]=new TextField()
				txtArr[i].selectable=false;
				txtArr[i].autoSize=TextFieldAutoSize.LEFT;
				txtArr[i].htmlText="<font color='#FFFFFF'>→ " + listArr[i].name + "</font>";
				txtArr[i].y=i * 20;
				addChild(txtArr[i]);
				addChild(mcArr[i]);
				}
			addChild(listMC);
			upList(0);
		}
		//================================================》
		//当列表某一项被点击后广播点击事件
		private function downs(e:Event) {
			_musicURL=e.currentTarget.urls;
			dispatchEvent(new Event(MUSIC_CLICK));			
		}
	}
}